package com.itheima.datastructure.queue;

import java.util.Iterator;
/*
环形数组：位置计算（当前位置+移动步数）%数组长度
 */

public class ArrayQueue1<E> implements Queue<E>,Iterable<E>{

    //定义环形数组
    private E[] array;
    private int head=0;//头指针
    private int tail=0;//尾指针

    @SuppressWarnings("all")
    public ArrayQueue1(int capacity){
        //为了判断是否已经满了，要空一位
        array=(E[]) new Object[capacity+1];
    }
    @Override
    public boolean offer(E value) {
        if(isFull()){
            return false;
        }
        array[tail]=value;
        tail=(tail+1)%array.length;
        return true;
    }

    @Override
    public E poll() {
        if(isEmpty()){
            return null;
        }
        E value=array[head];
        head=(head+1)% array.length;
        return value;
    }

    @Override
    public E peek() {
        if(isEmpty()){
            return null;
        }
       return array[head];
    }

    @Override
    public boolean isEmpty() {
        return head==tail;
    }

    @Override
    public boolean isFull() {
        return (tail+1)%array.length==head;
    }

    @Override
    public Iterator<E> iterator() {
        return new Iterator<E>() {
            int p=head;
            @Override
            public boolean hasNext() {
                return p!=tail;
            }

            @Override
            public E next() {
                E value=array[p];
                p = (p + 1) % array.length;
                return value;
            }
        };
    }
}
